____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―
Datensegment
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
top
Als Datensegment bezeichnet man den Teil von Objektdateien oder eines laufenden Prozesses, in dem globale und statische Variablen abgelegt sind. Diese Variablen mΓΌssen beim Start des Programms bereits im Speicher vorhanden und initialisiert sein, auΓerdem ist ihr Speicherplatzbedarf bereits zur Γbersetzungszeit bekannt. Daher wird bereits beim Γbersetzen ein Datenblock erstellt, der spΓ€ter als Teil des Programms beim Starten in den Speicher geladen und sofort verwendet werden kann. Manchmal werden Daten-, BSS-, Stack- und Heap-Bereiche gemeinsam als βDatensegmentβ bezeichnet.
In Maschinensprache bestehen dann getrennte Segmente fΓΌr Daten und ausfΓΌhrbaren Code. DafΓΌr halten zum Beispiel Prozessoren der x86-Architektur im Realmode die Segmentregister CS (CodeSegment) und DS (DataSegment) bereit. Einzelne Befehle beziehen sich dann entweder auf das Daten- oder Codesegment. So bezeichnet die Sprunganweisung JMP 0120 zum Beispiel den Sprung innerhalb des Segments, welches durch die Segmentadresse im Segmentregister CS vorgegebenen ist, um den Offset 0120 Bytes weiter zu springen. Im Real Mode ergibt die Multiplikation der Segmentadresse mit dem Hexwert 10h (16 dezimal), was einem Linksshift um 4 Bits entspricht, und anschlieΓender Addition des Offset 0120 die absolute Adresse im physischen Addressraum. Bei Befehlen zum Datenaustausch wie zum Beispiel MOV DX, [BX] dagegen bezieht sich die Adresse in BX als Zeiger auf das Datensegment. Assemblersprachen stellen eigene Anweisungen zur Definition von Segmenten fΓΌr Daten, Code, Stack, und deren Reihenfolge bereit (zum Beispiel .DATA, .CODE, .STACK u. a.).
In manchen Betriebssystemen (z. B. in z/OS) ist die Trennung von Code- und Datensegmenten nicht erforderlich. Die Maschinenbefehle unterscheiden diese beiden Bereichstypen nicht, sondern adressieren Daten und Codeteile mit identischen Verfahren, Registern etc. Ein Maschinenprogramm kann demzufolge Daten und Code gemischt enthalten; aus GrΓΌnden der SoftwarequalitΓ€t (Wartbarkeit) werden jedoch Datendeklarationen und der Befehlsteil des Programms meist strukturell getrennt implementiert.
Contents
β’ Siehe auch
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Block Started by Symbol
Die Bezeichnung Block Started by Symbol wird in vielen Compiler und Linker fΓΌr ein Segment benutzt, das statische Variablen enthΓ€lt, die mit Nullwerten initialisiert werden. Oft wird die AbkΓΌrzung BSS oder .bss benutzt. Dieser Speicherbereich eignet sich z. B. fΓΌr Arrays, die nicht mit vordefinierten Werten initialisiert sind. In der Objektdatei werden ΓΌblicherweise nicht die Nullwerte gespeichert, sondern nur die GrΓΆΓe des BSS-Bereichs. Der Lader wertet dann diese Information aus und fordert einen entsprechend groΓen Speicherbereich vom Betriebssystem an, wobei er sicherstellt, dass der Speicherbereich mit den Nullwerten initialisiert wird.
Historisch war Block Started by Symbol eine Pseudo-Operation im UA-SAP (United Aircraft Symbolic Assembly Program), ein Mitte der 1950er entwickelter Assembler.
Siehe auch